]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
inputMethod: Keep track of preedit string visibility
authorCarlos Garnacho <carlosg@gnome.org>
Tue, 13 Nov 2018 17:28:15 +0000 (18:28 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Tue, 13 Nov 2018 17:52:15 +0000 (18:52 +0100)
So we can silence update-preedit-text signals that keep the
preedit string invisible.

https://gitlab.gnome.org/GNOME/gtk/issues/1447

js/misc/inputMethod.js

index e22dfccc5bd37d5a0e908cf230e91b7832ac352a..0f5590b3fb5b2dd31b3957b7a6588c84c815a54a 100644 (file)
@@ -17,6 +17,7 @@ var InputMethod = new Lang.Class({
         this._currentFocus = null;
         this._preeditStr = '';
         this._preeditPos = 0;
+        this._preeditVisible = false;
         this._ibus = IBus.Bus.new_async();
         this._ibus.connect('connected', this._onConnected.bind(this));
         this._ibus.connect('disconnected', this._clear.bind(this));
@@ -80,6 +81,7 @@ var InputMethod = new Lang.Class({
         this._enabled = false;
         this._preeditStr = ''
         this._preeditPos = 0;
+        this._preeditVisible = false;
     },
 
     _emitRequestSurrounding() {
@@ -98,20 +100,27 @@ var InputMethod = new Lang.Class({
     _onUpdatePreeditText(context, text, pos, visible) {
         if (text == null)
             return;
-        this._preeditStr = text.get_text();
-        this._preeditPos = pos;
+
+        let preedit = text.get_text();
+
         if (visible)
-            this.set_preedit_text(this._preeditStr, pos);
-        else
+            this.set_preedit_text(preedit, pos);
+        else if (this._preeditVisible)
             this.set_preedit_text(null, pos);
+
+        this._preeditStr = preedit;
+        this._preeditPos = pos;
+        this._preeditVisible = visible;
     },
 
     _onShowPreeditText(context) {
+        this._preeditVisible = true;
         this.set_preedit_text(this._preeditStr, this._preeditPos);
     },
 
     _onHidePreeditText(context) {
         this.set_preedit_text(null, this._preeditPos);
+        this._preeditVisible = false;
     },
 
     _onForwardKeyEvent(context, keyval, keycode, state) {